import java.awt.Color;
import java.rmi.Naming;

public class Acciones extends javax.swing.JFrame {

    private String ip;
    private int port;
    private String url;
    private IServidorRemoto obj = null;
    private String [][] mensaje;
    String[][] mensajeRespuesta;


    public Acciones() {
        initComponents();

        ip = "localhost";
        port = 9999;
        url = "//" + ip + ":" + port + "/Servidor";


        try {
            obj = (IServidorRemoto) Naming.lookup(url);
            mensaje = (String[][])obj.listaArchivos(ip);
            mensajeRespuesta = mensaje;

           


            for (int i=0; i<mensajeRespuesta.length; i++ )

                {

                    if (mensajeRespuesta[i][0]==null){

                        break;
                    }else
                    {
                        int primero, segundo, resto = 0;
                        primero = mensajeRespuesta[i][0].length();
                        segundo = mensajeRespuesta[i][1].length();
                        resto  = 35 - primero - segundo;
                        String espacios = "";

                        for (int j=0 ;j <= resto; j++)
                            espacios += ".";


                        listaArchivos.addItem(mensajeRespuesta[i][0]+espacios+mensajeRespuesta[i][1]);
                    }

                }


        } catch (Exception e) {
            e.printStackTrace();
        }


    }


    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jSeparator1 = new javax.swing.JSeparator();
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jScrollPane1 = new javax.swing.JScrollPane();
        contenidoA = new javax.swing.JTextArea();
        jPanel1 = new javax.swing.JPanel();
        VisualizarBitacoraSolicitudes = new javax.swing.JButton();
        VisualizarBitacoraDatos = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        contenidoRMI = new javax.swing.JTextArea();
        jScrollPane3 = new javax.swing.JScrollPane();
        contenidoActualizacion = new javax.swing.JTextArea();
        listaArchivos = new javax.swing.JComboBox();
        jLabel2 = new javax.swing.JLabel();
        EliminarArchivo = new javax.swing.JButton();
        Visualizacion = new javax.swing.JButton();
        ActualizarArchivo = new javax.swing.JButton();
        mensajeLabel = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Accion de Archvos");

        jLabel1.setFont(new java.awt.Font("Verdana", 1, 24));
        jLabel1.setText("Operaciones de Archivos");

        contenidoA.setColumns(20);
        contenidoA.setRows(5);
        jScrollPane1.setViewportView(contenidoA);

        jTabbedPane1.addTab("Informacion del Archivo", jScrollPane1);

        VisualizarBitacoraSolicitudes.setText("Servidor de Solicitudes");
        VisualizarBitacoraSolicitudes.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                VisualizarBitacoraSolicitudesMouseClicked(evt);
            }
        });
        VisualizarBitacoraSolicitudes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                VisualizarBitacoraSolicitudesActionPerformed(evt);
            }
        });

        VisualizarBitacoraDatos.setText("Servidor de Archivos");
        VisualizarBitacoraDatos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                VisualizarBitacoraDatosMouseClicked(evt);
            }
        });

        contenidoRMI.setColumns(20);
        contenidoRMI.setRows(5);
        jScrollPane2.setViewportView(contenidoRMI);

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 512, Short.MAX_VALUE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(VisualizarBitacoraSolicitudes)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(VisualizarBitacoraDatos)))
                .addContainerGap())
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(VisualizarBitacoraSolicitudes)
                    .addComponent(VisualizarBitacoraDatos))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 142, Short.MAX_VALUE)
                .addContainerGap())
        );

        jTabbedPane1.addTab("Visualizar Bitacoras", jPanel1);

        contenidoActualizacion.setColumns(20);
        contenidoActualizacion.setRows(5);
        jScrollPane3.setViewportView(contenidoActualizacion);

        jTabbedPane1.addTab("Actualizacion de Archivo", jScrollPane3);

        listaArchivos.setFont(new java.awt.Font("Courier New", 0, 11));
        listaArchivos.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Seleccione un Archivo" }));
        listaArchivos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                listaArchivosActionPerformed(evt);
            }
        });

        jLabel2.setFont(new java.awt.Font("Verdana", 1, 12));
        jLabel2.setText("Archivos");

        EliminarArchivo.setText("Eliminar");
        EliminarArchivo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                EliminarArchivoMouseClicked(evt);
            }
        });

        Visualizacion.setText("Visualizar");
        Visualizacion.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                VisualizacionMouseClicked(evt);
            }
        });
        Visualizacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                VisualizacionActionPerformed(evt);
            }
        });

        ActualizarArchivo.setText("Actualizar");
        ActualizarArchivo.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                ActualizarArchivoMouseClicked(evt);
            }
        });

        mensajeLabel.setText("Nada");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(jTabbedPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE)
                            .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE)
                            .addComponent(jLabel1))
                        .addContainerGap())
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(jLabel2)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(listaArchivos, 0, 294, Short.MAX_VALUE))
                            .addComponent(mensajeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 355, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(ActualizarArchivo, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(Visualizacion, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                        .addGap(4, 4, 4)
                        .addComponent(EliminarArchivo, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(20, 20, 20))))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(listaArchivos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(EliminarArchivo)
                    .addComponent(Visualizacion))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(ActualizarArchivo)
                    .addComponent(mensajeLabel))
                .addGap(18, 18, 18)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 221, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jTabbedPane1.getAccessibleContext().setAccessibleName("Informacion");

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void ActualizarLista ()
        {


            listaArchivos.removeAllItems();
            listaArchivos.addItem("Seleccione un archivo");

             try {
            obj = (IServidorRemoto) Naming.lookup(url);
            mensaje = (String[][])obj.listaArchivos(ip);
            mensajeRespuesta = mensaje;

            for (int i=0; i<mensajeRespuesta.length; i++ )

                {

                    if (mensajeRespuesta[i][0]==null){

                        break;
                    }else
                    {
                        int primero, segundo, resto = 0;
                        primero = mensajeRespuesta[i][0].length();
                        segundo = mensajeRespuesta[i][1].length();
                        resto  = 35 - primero - segundo;
                        String espacios = "";

                        for (int j=0 ;j <= resto; j++)
                            espacios += ".";


                        listaArchivos.addItem(mensajeRespuesta[i][0]+espacios+mensajeRespuesta[i][1]);
                    }

                }


        } catch (Exception e) {
            e.printStackTrace();
        }
        }
    

    private void VisualizacionMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_VisualizacionMouseClicked

        String contenido= "";
        String[] separar = new String[100];
        int seleccion;

       

        try {
            obj = (IServidorRemoto) Naming.lookup(url);
            seleccion= (int)listaArchivos.getSelectedIndex();
            
            contenido = (String)obj.vista(ip,mensajeRespuesta[(seleccion-1)][0]);

            contenidoA.setText("");
            contenidoA.append(contenido);

             this.ActualizarLista();

        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }//GEN-LAST:event_VisualizacionMouseClicked

    private void EliminarArchivoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_EliminarArchivoMouseClicked

        Boolean respuesta= false;
        String contenido= "";
        int seleccion;
        
        try {
            obj = (IServidorRemoto) Naming.lookup(url);
            seleccion= (int)listaArchivos.getSelectedIndex();
           
            respuesta = (Boolean)obj.eliminarArchivo(ip,mensajeRespuesta[(seleccion-1)][0]);

            if (respuesta){
                mensajeLabel.setForeground(Color.green);
                mensajeLabel.setText("El archivo fue borrado exitosamente");
            }else{
                mensajeLabel.setForeground(Color.red);
                mensajeLabel.setText("El archivo no fue borrado exitosamente");
            }
                this.ActualizarLista();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }//GEN-LAST:event_EliminarArchivoMouseClicked

    private void VisualizacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_VisualizacionActionPerformed
        // TODO add your handling code here:

        

    }//GEN-LAST:event_VisualizacionActionPerformed

    private void VisualizarBitacoraDatosMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_VisualizarBitacoraDatosMouseClicked
        // TODO add your handling code here:

        String bitacoraDATOS= "";

        try {
            obj = (IServidorRemoto) Naming.lookup(url);

            bitacoraDATOS = (String)obj.consultarBitacora(ip,"datos");

            contenidoRMI.setText("");

            contenidoRMI.append(bitacoraDATOS);

        } catch (Exception e) {
            e.printStackTrace();
        }
}//GEN-LAST:event_VisualizarBitacoraDatosMouseClicked

    private void VisualizarBitacoraSolicitudesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_VisualizarBitacoraSolicitudesActionPerformed
        // TODO add your handling code here:
}//GEN-LAST:event_VisualizarBitacoraSolicitudesActionPerformed

    private void VisualizarBitacoraSolicitudesMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_VisualizarBitacoraSolicitudesMouseClicked
        // TODO add your handling code here:


        String bitacoraRMI= "";

        try {
            obj = (IServidorRemoto) Naming.lookup(url);

            bitacoraRMI = (String)obj.consultarBitacora(ip,"rmi");

            contenidoRMI.setText("");

            contenidoRMI.append(bitacoraRMI);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }//GEN-LAST:event_VisualizarBitacoraSolicitudesMouseClicked

    private void ActualizarArchivoMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_ActualizarArchivoMouseClicked
        // TODO add your handling code here:
        Boolean contenido;
        String[] separar = new String[100];
        int seleccion;
        String actualizacion="" ;
        
        try {
            obj = (IServidorRemoto) Naming.lookup(url);
            seleccion= (int)listaArchivos.getSelectedIndex();

           actualizacion=contenidoActualizacion.getText();

           contenido = (Boolean)obj.actualizar(ip,mensajeRespuesta[(seleccion-1)][0],actualizacion);

            if (contenido){
               contenidoActualizacion.setText("El archivo fue actualizado exitosamente");
            }else{
                contenidoActualizacion.setText("El archivo no fue actualizado exitosamente");
            }

            this.ActualizarLista();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }//GEN-LAST:event_ActualizarArchivoMouseClicked

    private void listaArchivosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listaArchivosActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_listaArchivosActionPerformed

    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Acciones().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton ActualizarArchivo;
    private javax.swing.JButton EliminarArchivo;
    private javax.swing.JButton Visualizacion;
    private javax.swing.JButton VisualizarBitacoraDatos;
    private javax.swing.JButton VisualizarBitacoraSolicitudes;
    private javax.swing.JTextArea contenidoA;
    private javax.swing.JTextArea contenidoActualizacion;
    private javax.swing.JTextArea contenidoRMI;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JScrollPane jScrollPane3;
    private javax.swing.JSeparator jSeparator1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JComboBox listaArchivos;
    private javax.swing.JLabel mensajeLabel;
    // End of variables declaration//GEN-END:variables

}
